// https://leetcode.cn/problems/longest-substring-without-repeating-characters/

// 题干：给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串的长度。

// 示例：输入: s = "abcabcbb"
//       输出: 3

// 碎语：当哈希表中某一个元素的数量大于2个时，此时right指针再往右已经没有意义
//       取而代之是要left++，很明显时滑动窗口类型的问题，同时题目已经明确类型字符串，可以用一个128空间的数组来存储

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int LongestSubstring(string s)
    {
        int hash[128] = {0};
        int left = 0, right = 0, ret = 0;

        while (right < s.size()){
            hash[s[right]]++; // 进窗口
            while (hash[s[right]] > 1){ // 判断
                hash[s[left++]]--;
            }
            ret = max(ret, right - left + 1);
            right++;
        }

        return ret;
    }
};

int main()
{
    Solution sol;
    string s = "abcabcbb";

    cout << sol.LongestSubstring(s) << endl;

    return 0;
}
